const { SystemConfig } = require('../models');

// 获取所有系统配置
exports.getAllConfigs = async (req, res) => {
  try {
    const configs = await SystemConfig.findAll();
    res.status(200).json(configs);
  } catch (error) {
    console.error('获取系统配置失败:', error);
    res.status(500).json({ message: '获取系统配置失败', error: error.message });
  }
};

// 获取单个系统配置
exports.getConfigByKey = async (req, res) => {
  try {
    const { key } = req.params;
    const config = await SystemConfig.findOne({ where: { key } });
    
    if (!config) {
      return res.status(404).json({ message: `未找到配置项: ${key}` });
    }
    
    res.status(200).json(config);
  } catch (error) {
    console.error('获取系统配置失败:', error);
    res.status(500).json({ message: '获取系统配置失败', error: error.message });
  }
};

// 更新系统配置
exports.updateConfig = async (req, res) => {
  try {
    const { key } = req.params;
    const { value, description } = req.body;
    
    const config = await SystemConfig.findOne({ where: { key } });
    
    if (!config) {
      return res.status(404).json({ message: `未找到配置项: ${key}` });
    }
    
    config.value = value;
    if (description) {
      config.description = description;
    }
    
    await config.save();
    
    res.status(200).json({ message: '配置更新成功', config });
  } catch (error) {
    console.error('更新系统配置失败:', error);
    res.status(500).json({ message: '更新系统配置失败', error: error.message });
  }
};

// 创建系统配置
exports.createConfig = async (req, res) => {
  try {
    const { key, value, description } = req.body;
    
    // 检查配置是否已存在
    const existingConfig = await SystemConfig.findOne({ where: { key } });
    if (existingConfig) {
      return res.status(400).json({ message: `配置项已存在: ${key}` });
    }
    
    const newConfig = await SystemConfig.create({
      key,
      value,
      description
    });
    
    res.status(201).json({ message: '配置创建成功', config: newConfig });
  } catch (error) {
    console.error('创建系统配置失败:', error);
    res.status(500).json({ message: '创建系统配置失败', error: error.message });
  }
};

// 获取邮箱验证开关状态
exports.getEmailVerificationStatus = async (req, res) => {
  try {
    const config = await SystemConfig.findOne({ 
      where: { key: 'emailVerificationEnabled' } 
    });
    
    if (!config) {
      return res.status(404).json({ message: '未找到邮箱验证配置' });
    }
    
    const isEnabled = config.value === 'true';
    
    res.status(200).json({ 
      enabled: isEnabled,
      config
    });
  } catch (error) {
    console.error('获取邮箱验证状态失败:', error);
    res.status(500).json({ message: '获取邮箱验证状态失败', error: error.message });
  }
};

// 切换邮箱验证开关
exports.toggleEmailVerification = async (req, res) => {
  try {
    const config = await SystemConfig.findOne({ 
      where: { key: 'emailVerificationEnabled' } 
    });
    
    if (!config) {
      return res.status(404).json({ message: '未找到邮箱验证配置' });
    }
    
    // 切换状态
    const newValue = config.value === 'true' ? 'false' : 'true';
    config.value = newValue;
    
    await config.save();
    
    res.status(200).json({ 
      message: `邮箱验证已${newValue === 'true' ? '开启' : '关闭'}`,
      enabled: newValue === 'true',
      config
    });
  } catch (error) {
    console.error('切换邮箱验证状态失败:', error);
    res.status(500).json({ message: '切换邮箱验证状态失败', error: error.message });
  }
};